/*  ----------------------------------------------------------------------------
 *  Arello Mobile
 *  Fast 3d Engine
 *  ----------------------------------------------------------------------------
 * Except where otherwise noted, this work is licensed under
 * http://creativecommons.org/licenses/by/3.0
 */
#pragma once

#include "Channel.h"
#include <Atom.h>
#include <filesystem/String.hpp>
#include <properties/PropertyContainer.h>

namespace liba {
namespace noise {
namespace hard {

// Hardware is the listener for 3d-sounds
class Hardware 
	: public properties::PropertyContainer
{
public:
	static const Atom global_volume_name;
	static const Atom listener_position_name;
	static const Atom listener_speed_name;
	static const Atom listener_environment_name;
	static const Atom listener_up_name;
	static const Atom listener_front_name;

	static const Atom channel_type_2d;
	static const Atom channel_type_3d;
	static const Atom channel_type_surround;
	Hardware();
	virtual ~Hardware();

	// never returns 0
	virtual Channel * create_static_channel( const Atom & channel_type, const filesystem::String & name)=0;
	virtual Channel * create_streaming_channel( const Atom & channel_type )=0;
	virtual std::string get_name()const=0;
protected:
};

} // namespace hard
} // namespace noise
} // namespace liba
using namespace liba;

